package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

// ioutil 包介绍。注意：从 G01.16 开始会废弃 io/ioutil 包，相关的功能会挪到io包或os包
func main() {

	/*
		一. ReadFile()：读取文件所有数据，返回字节数组
	*/
	filePath := "./test.txt"
	file, err := os.ReadFile(filePath)
	if err != nil {
		fmt.Println("读取文件所有数据异常：", err.Error())
	} else {
		fmt.Println(file)
		fmt.Println(string(file))
	}

	/*
		二. WriteFile()：向指定文件写入数据，如果文件不存在则创建
			TIPS：每次写入数据之前会清空文件
	*/
	err = os.WriteFile(filePath, []byte(`eewewe
43434
434343
43434343434
43432432424324
423432vdgfdgfg
粉丝纷纷嚷嚷太热热天热`), os.ModePerm)
	if err != nil {
		fmt.Println("向指定文件写入数据异常：", err.Error())
	}

	/*
		三. ReadDir()： 读取一个目录下的子内容（子文件和子目录名称）
			TIPS: 仅读取一层，即最近子节点内容
	*/
	dirPath := "./"
	dir, err := ioutil.ReadDir(dirPath)
	if err != nil {
		fmt.Println(" 读取一个目录下的子内容异常：", err.Error())
	} else {
		for i, info := range dir {
			fmt.Println(i, info.Name(), info.IsDir(), info.Size(), info.ModTime())
		}
	}

	/*
		四. TempDir()：当前目录下，创建一个指定字符串为名称前缀的临时文件夹，并返回文件夹路径
	*/
	tempDir, err := os.MkdirTemp("./", "temp")
	if err != nil {
		fmt.Println(" 创建文件夹异常：", err.Error())
	} else {
		fmt.Println(tempDir)
	}

	/*
		五. TempFile()：当前目录下，创建一个以指定字符串为名称前缀的文件，并以读写模式打开文件，并返回os.File指针对象
	*/
	tempFile, err := os.CreateTemp("./", "temp")
	// 延迟执行
	defer func(tempFile *os.File) {
		err := tempFile.Close()
		if err != nil {

		}
	}(tempFile)
	if err != nil {
		fmt.Println(" 创建文件夹异常：", err.Error())
	} else {
		fmt.Println(tempFile)
		// 写入数据
		_, _ = tempFile.WriteString("当前目录下，创建一个以指定字符串为名称前缀的文件，并以读写模式打开文件，并返回os.File指针对象")
	}
}
